package com.example.demo.day0226;
/**
 *  HashMap
 * 底层数据结构是哈希表。线程不安全，效率高
 * 哈希表依赖两个方法：hashCode()和equals()
 * 执行顺序：首先判断hashCode()值是否相同
 * 是：继续执行equals(),看其返回值
 * true:说明元素重复，不添加
 * false:就直接添加到集合
 * 最终：自动生成hashCode()和equals()即可
 */

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class DemoMap {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<String,Integer>();
        map.put("b",1);//添加方法使用put
//        map.put("b".2)//key的值必须不同
        map.put("c",2);
        map.put("e",2);//value值可以相同
//        Collections.reverse(map);HashMap不能使用collection
        System.out.println(map);

        System.out.println(map.get("b"));//根据key来取值

        map.remove("c");//根据key移除键值对

        System.out.println(map);

        System.out.println(map.size());//map集合的长度

        System.out.println(map.containsKey("a"));//判断当前的map集合是否包含指定的key

        System.out.println(map.containsValue(10));//判断当前的map集合是否包含指定的Value

//        map.clear();//清空map集合
        Set<String> keys= map.keySet();//获取map集合的key的集合并放入一个新的set集合
        map.values();//获取map集合的value的值
        for (String key : keys){//通过map.keySet遍历map集合
            System.out.println("key: +" + key + ",value:"+map.get(key));

            Set<Map.Entry<String,Integer>> entry = map.entrySet();//通过map.entrySet();遍历map集合
            for (Map.Entry<String,Integer> en:entry){
                System.out.println("key: +" + en.getKey()+ ",value:"+en.getValue());
            }

        }
    }
}
